package com.hey.qrcode.dao;

import com.hey.qrcode.entity.AccessToken;
import com.hey.qrcode.entity.Message;
import com.hey.qrcode.entity.QrCode;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import java.util.List;

@Mapper
public interface QrCodeDao {

    /**
     * 更新关注人数
     * @param id
     */
    @Update("update qr_code set followers_day=followers_day+1,followers_week=followers_week+1,followers=followers+1,followers_ten_min=followers_ten_min+1 where id=#{id}")
    Integer updateFollowersCount(Long id);


    /**
     * 添加二维码
     * @param qrCode
     * @return
     */
    @Insert("insert into qr_code(code_url,remark,tel,update_time,followers_day,followers_week,followers,followers_week_day)" +
            "values (#{codeUrl},#{remark},#{tel},now(),0,0,0,1)")
    Integer addQrCode(QrCode qrCode);

    /**
     * 获取所有二维码
     * @return
     */
    @Select("select * from qr_code")
    List<QrCode> getAllQrCode();

    /**
     * 每天清算天关注人数
     */
    @Update("update qr_code set followers_day=0")
    void followersDayTask();

    /**
     * 每天清算周关注人数
     */
    @Update("update qr_code set followers_week=0,followers_week_day=0 where followers_week_day=7;")
    void followersWeekTask();

    /**
     * 定时任务，获取非法的二维码关注人数（防止刷单）
     * @return
     */
    @Select("select * from qr_code where followers_ten_min>200")
    List<QrCode> getIllegalQrCode();

    /**
     * 每十分钟对该字段进行清零
     */
    @Update("update qr_code set followers_ten_min=0")
    void followersTenMinTask();

    /**
     * 发送提示消息
     * @param message
     * @return
     */
    @Insert("insert notify(title,content,update_time) values (#{title},#{content},now())")
    Integer sendMessage(Message message);

    /**
     * 获取token
     * @return
     */
    @Select("select access_token from access_token a where TIMESTAMPDIFF(SECOND,a.update_time,now())<7000")
    String getToken();

    /**
     * 更新token
     * @param token
     */
    @Update("update access_token set access_token=#{token} where id=1")
    void updateToken(String token);

}
